package com.loser.module.sql;

import io.github.loserya.core.wrapper.LambdaQueryWrapper;
import io.github.loserya.utils.func.SFunction;

public class LambdaAggregate<Q, R>
        implements
        MogoSelectAggregate<LambdaAggregate<Q, R>>,
        MogoAggregate<LambdaAggregate<Q, R>, SFunction<Q, ?>, SFunction<R, ?>>,
        MogoFromAggregate<LambdaAggregate<Q, R>, Q>,
        MogoWhereAggregate<LambdaAggregate<Q, R>, Q>,
        MogoFuncAggregate<LambdaAggregate<Q, R>, Q> {


    @Override
    public LambdaAggregate<Q, R> from(Class<Q> clazz) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> filed(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> avg(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> count(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> max(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> min(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> sum(boolean condition, SFunction<Q, ?> column, SFunction<R, ?> resColum) {
        return this;
    }


    @Override
    public LambdaAggregate<Q, R> select() {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> where(LambdaQueryWrapper<Q> lambdaQueryWrapper) {
        return this;
    }

    @Override
    @SafeVarargs
    public final LambdaAggregate<Q, R> groupBy(boolean condition, SFunction<Q, ?>... column) {
        return this;
    }

    @Override
    @SafeVarargs
    public final LambdaAggregate<Q, R> orderByDesc(boolean condition, SFunction<Q, ?>... column) {
        return this;
    }

    @SafeVarargs
    @Override
    public final LambdaAggregate<Q, R> orderByAsc(boolean condition, SFunction<Q, ?>... column) {
        return this;
    }


    @Override
    public LambdaAggregate<Q, R> skip(boolean condition, long skip) {
        return this;
    }

    @Override
    public LambdaAggregate<Q, R> limit(boolean condition, Long limit) {
        return this;
    }

    @Override
    @SafeVarargs
    public final LambdaAggregate<Q, R> groupBy(SFunction<Q, ?>... column) {
        return MogoFuncAggregate.super.groupBy(column);
    }

    @Override
    @SafeVarargs
    public final LambdaAggregate<Q, R> orderByDesc(SFunction<Q, ?>... column) {
        return MogoFuncAggregate.super.orderByDesc(column);
    }

    @Override
    @SafeVarargs
    public final LambdaAggregate<Q, R> orderByAsc(SFunction<Q, ?>... column) {
        return MogoFuncAggregate.super.orderByAsc(column);
    }
}
